`define ID_ALU  2'b00
`define ID_RD   2'b01
`define ID_PC4  2'b10
`define ID_EXT  2'b11

`define ALU_ADD   4'b0000
`define ALU_SUB   4'b0001
`define ALU_AND   4'b1110
`define ALU_OR    4'b1100
`define ALU_XOR   4'b1000
`define ALU_SLL   4'b0010
`define ALU_SRL   4'b1010
`define ALU_SRA   4'b1011
`define ALU_SLT   4'b0100
`define ALU_SLTU  4'b0110

// `define PC_4    2'b00
// `define PC_IMM  2'b01
// `define PC_ALU  2'b10
`define PC_PC4  1'b0
`define PC_NPC  1'b1

`define WD_ALU  2'b00
`define WD_RD   2'b01
`define WD_PC4  2'b10
`define WD_EXT  2'b11

`define SEXT_I  3'b000
`define SEXT_S  3'b001
`define SEXT_B  3'b010
`define SEXT_U  3'b011
`define SEXT_J  3'b100

`define ALUA_RD1 1'b0
`define ALUA_PC  1'b1
`define ALUB_RD2 1'b0
`define ALUB_EXT 1'b1

`define OP_R     7'b0110011
`define OP_I     7'b0010011
`define OP_LOAD  7'b0000011
`define OP_JALR  7'b1100111
`define OP_S     7'b0100011
`define OP_B     7'b1100011
`define OP_LUI   7'b0110111
`define OP_AUIPC 7'b0010111
`define OP_J     7'b1101111

`define FUNC3_BEQ   3'b000
`define FUNC3_BNE   3'b001
`define FUNC3_BLT   3'b100
`define FUNC3_BGE   3'b101
`define FUNC3_BLTU  3'b110
`define FUNC3_BGEU  3'b111

`define NPC_NOP      4'b0000
`define NPC_BEQ      4'b1000
`define NPC_BNE      4'b1001
`define NPC_BLT      4'b1100
`define NPC_BGE      4'b1101
`define NPC_BLTU     4'b1110
`define NPC_BGEU     4'b1111
`define NPC_JAL      4'b1010
`define NPC_JALR     4'b1011

`define DRAM_LB    3'b000
`define DRAM_LBU   3'b100
`define DRAM_LH    3'b001
`define DRAM_LHU   3'b101
`define DRAM_LW    3'b010

`define DRAM_SB    2'b00
`define DRAM_SH    2'b01
`define DRAM_SW    2'b10